{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * redo run 6, throw the kitchen sink: sample segments, global std, double/half views, local/secondary mask + std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/extended_18_run_7/1/AstroCNNModel_extended_20201129_231205',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/2/AstroCNNModel_extended_20201129_235903',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/3/AstroCNNModel_extended_20201130_004532',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/4/AstroCNNModel_extended_20201130_013218',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/5/AstroCNNModel_extended_20201130_021909',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/6/AstroCNNModel_extended_20201130_030840',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/7/AstroCNNModel_extended_20201130_035517',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/8/AstroCNNModel_extended_20201130_044154',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/9/AstroCNNModel_extended_20201130_052831',\n",
       " '/mnt/tess/astronet/checkpoints/extended_18_run_7/10/AstroCNNModel_extended_20201130_061504']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/extended_18_run_7'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-18-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v3-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 9\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n",
      "Running model 10\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1335 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[0] >= config.hparams.prediction_threshold:\n",
    "            agg_preds[tic_id].append('disp_E')\n",
    "        else:\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(pred_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_E', 'disp_N', 'disp_J', 'disp_S', 'disp_B']\n",
    "\n",
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9627329192546584\n",
      "Precision: 0.7560975609756098\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_E_p'] > 0)\n",
    "pos = (pl['disp_E'] > 0)\n",
    "\n",
    "pneg = (pl['disp_E_p'] == 0)\n",
    "neg = (pl['disp_E'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "118412801\n",
      "141753278\n",
      "158159741\n",
      "365242787\n",
      "384065528\n",
      "404220255\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.003050</td>\n",
       "      <td>0.031187</td>\n",
       "      <td>0.992845</td>\n",
       "      <td>0.008115</td>\n",
       "      <td>0.002880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.017514</td>\n",
       "      <td>0.099548</td>\n",
       "      <td>0.946157</td>\n",
       "      <td>0.008558</td>\n",
       "      <td>0.053185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.007725</td>\n",
       "      <td>0.079471</td>\n",
       "      <td>0.982606</td>\n",
       "      <td>0.005994</td>\n",
       "      <td>0.002125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.000754</td>\n",
       "      <td>0.087272</td>\n",
       "      <td>0.997658</td>\n",
       "      <td>0.003049</td>\n",
       "      <td>0.008064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.005601</td>\n",
       "      <td>0.045357</td>\n",
       "      <td>0.983763</td>\n",
       "      <td>0.012233</td>\n",
       "      <td>0.003529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.005330</td>\n",
       "      <td>0.071443</td>\n",
       "      <td>0.985947</td>\n",
       "      <td>0.010209</td>\n",
       "      <td>0.005314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.002542</td>\n",
       "      <td>0.080736</td>\n",
       "      <td>0.991638</td>\n",
       "      <td>0.005764</td>\n",
       "      <td>0.014996</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.003893</td>\n",
       "      <td>0.072967</td>\n",
       "      <td>0.992041</td>\n",
       "      <td>0.008309</td>\n",
       "      <td>0.007177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.792936</td>\n",
       "      <td>0.073256</td>\n",
       "      <td>0.161216</td>\n",
       "      <td>0.010577</td>\n",
       "      <td>0.003667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144383508</th>\n",
       "      <td>0.032368</td>\n",
       "      <td>0.108520</td>\n",
       "      <td>0.916641</td>\n",
       "      <td>0.018485</td>\n",
       "      <td>0.010425</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_E    disp_N    disp_J    disp_S    disp_B\n",
       "tic_id                                                     \n",
       "144383508  0.003050  0.031187  0.992845  0.008115  0.002880\n",
       "144383508  0.017514  0.099548  0.946157  0.008558  0.053185\n",
       "144383508  0.007725  0.079471  0.982606  0.005994  0.002125\n",
       "144383508  0.000754  0.087272  0.997658  0.003049  0.008064\n",
       "144383508  0.005601  0.045357  0.983763  0.012233  0.003529\n",
       "144383508  0.005330  0.071443  0.985947  0.010209  0.005314\n",
       "144383508  0.002542  0.080736  0.991638  0.005764  0.014996\n",
       "144383508  0.003893  0.072967  0.992041  0.008309  0.007177\n",
       "144383508  0.792936  0.073256  0.161216  0.010577  0.003667\n",
       "144383508  0.032368  0.108520  0.916641  0.018485  0.010425"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 144383508)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E_p</th>\n",
       "      <th>disp_N_p</th>\n",
       "      <th>disp_J_p</th>\n",
       "      <th>disp_S_p</th>\n",
       "      <th>disp_B_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_E_p, disp_N_p, disp_J_p, disp_S_p, disp_B_p, maxcount, disp_E, disp_N, disp_J, disp_S, disp_B]\n",
       "Index: []"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 114053589]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 1335)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][0]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "        \n",
    "pred_es.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_E']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = float(np.sum(pred_pos))\n",
    "    num_true_pos = float(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9615708993661887, max R: 0.9937888198757764, max P: 1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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MKb8e9jT06PR0dGibeXew6amJrW1tWl0dLTkGTqdnZ0ys5I/m3LvYf5nI5V+D8v9bMq9h4U/m1LvYf5nU+l7WPizKfUe5n82g4ODr702/zyb9zD/syn3Hs4m37N5D8vlezbvYamfzVTvIceISC2PEfl9DAwMqKuri2NEBceIah5nOUZEkjpG5N9Td684h6EfI/L4HBGp92OEpAlj5hgR4XNEZC4fI+baWUxBFj0kFU4/O52fWL7o0TlVw0qYWaukv1U0c4sUTZmbmMcff/y15auuik4u2bp164R/+KtXr9YJJ5ygV199Vdu3by/atnDhQp1//vkaGRkp2l/exo0b1dLSoueff14HDhwo2rZixQotW7ZMhw8f1pYtxfd27ezs1Lp16yRJmzZtmnDAWL9+vTo6OrRr1y7t27evaNuyZcu0YsUKdXd368knnyza1tLSoo0bN0qSNm/ePOFgc8EFF2jBggXas2ePdu/eXbTtxBNP1Jlnnqn+/v4J36uZ6corr5QUvYfj/+GfffbZOv744/Xyyy9rx44dRdsWLVqkc889V8PDwyXfw8suu0xNTU3avn27Dh06VLRt5cqVWrrLcbp/AAAgAElEQVR0qQ4ePKitW7cWbevq6tLatWslqeR+L774YrW1tWnnzp165ZVXiradeuqpWr58uY4eParNmzcXbcvlcrrkkkskSU899dSE/wjWrFmj+fPna/fu3dqzZ0/RtpNPPllnnHGGent7J4ypsbFRl18eXWW2ZcuWCQf7c845R4sXL9a+ffv0wgsvSNJr3/PixYt1zjnnaGhoqOT3esUVV8jMtG3bNh05cqRo26pVq3TSSSdp//792rZtW9G2+fPna82aNXL3kvvdsGGDWltbtWPHDu3fv79o22mnnaZTTjlFhw8f1jPPPFO0rb29XRdddJEk6YknnpjwH8zatWvV1dWl3bt3a+/evUXbli5dqpUrV6q7u1tPPPFE0bbm5mZdeumlkqSnn356wn9O5513no477ji99NJL2rVrV9G2JUuW6KyzztLAwEDJ75VjRCSNY8SLL76oxYsXc4yYwTEij2NEpB6PEfkP8aOjoxP+PUocI/L4HBGZy8cISRPeY44RET5HRObyMWL8v/N6ZyHeYMfMlkn6ebz69+7+7ina/1zRWR7Pu/vKKo7jDknvj1e/7u7vreT1t9566+sk7Zak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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs = ([], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
